package com.spring.framework.model.xml.inject;

/**
 * 如果某个bean是另一个bean的依赖项，则通常意味着这个bean被设置为另一个 bean的属性。但是，有时bean之间的依赖关系不太直接，他们之间没有直接的引用关系。
 * 例如，web应用中的Database的bean必须先于DAO的bean初始化，但是DAO的bean不需要持有Database的bean实例。
 * <p>
 * < bean >标签的depends-on属性可以显式强制在初始化使用此元素的bean之前初始化一个或多个指定bean。depends-on的值是先初始化的bean的id或者name，需要指
 * 定多个depends-on的bean时，可以使用英文的“,”、“;”“ ”符号分隔，Spring会按照depend-on中定义的顺序来初始化bean。
 * <p>
 * 另外，depends-on属性也可以指定相应依赖项的销毁时间顺序，最先初始化的bean将最后被销毁。无论是指定初始化顺序还是销毁顺序，都要求设置该属性的bean的作用
 * 范围是singleton，否则depends-on属性无效！
 */
public class DependsOnInject {

	public static class DependsOnInjectA {
		public DependsOnInjectA() {
			System.out.println("DependsOnDIA初始化");
		}

		public void init() {
			System.out.println("DependsOnDIA初始化回调");
		}

		public void destroy() {
			System.out.println("DependsOnDIA销毁回调");
		}

	}

	public static class DependsOnInjectB {
		public DependsOnInjectB() {
			System.out.println("DependsOnDIB初始化");
		}

		public void init() {
			System.out.println("DependsOnDIB初始化回调");
		}

		public void destroy() {
			System.out.println("DependsOnDIB销毁回调");
		}
	}

	public static class DependsOnInjectC {
		public DependsOnInjectC() {
			System.out.println("DependsOnDIC初始化");
		}

		public void init() {
			System.out.println("DependsOnDIC初始化回调");
		}

		public void destroy() {
			System.out.println("DependsOnDIC销毁回调");
		}
	}
}
